﻿
//代码逻辑是对的只是我删表重新建过，时间很少
#pragma execution_character_set("utf-8")
#include "analysiswidget.h"
#include "ui_analysiswidget.h"
#include <QImage>
#include <QPixmap>
#include <QPainter>
#include "database.h"

AnalysisWidget::AnalysisWidget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::AnalysisWidget)
{
    ui->setupUi(this);
    m_num = 30;
    keyAxis = ui->customPlot->xAxis;
    valueAxis = ui->customPlot->yAxis;
    fossil = new CustomBars(keyAxis, valueAxis);  // 使用xAxis作为柱状图的key轴，yAxis作为value轴
    rand = 100;
}

AnalysisWidget::~AnalysisWidget()
{
    delete ui;
}

void AnalysisWidget::initForm()
{
    //创建一个柱状图，并且设置它的风格

    fossil->setAntialiased(false); // 为了更好的边框效果，关闭抗齿锯
    fossil->setPen(QPen(QColor(0, 168, 140).lighter(130))); // 设置柱状图的边框颜色
    fossil->setBrush(QColor(0, 168, 140));  // 设置柱状图的画刷颜色
    //我们为柱状图的key轴设置一个文字类型的轴
    // 为柱状图设置一个文字类型的key轴，ticks决定了轴的范围，而labels决定了轴的刻度文字的显示
    QVector<double> ticks;
    QVector<QString> labels;
    m_vec.clear();
    for(int i = 0;i < m_num;i++){
        m_vec.append(0);//
    }
    for(int i = 0;i < m_num+1;i++){
        ticks.append(i+1);
        labels.append(QString::number(i+1));
    }

    QSharedPointer<QCPAxisTickerText> textTicker(new QCPAxisTickerText);
    textTicker->addTicks(ticks, labels);

    keyAxis->setTicker(textTicker);        // 设置为文字轴
    //设置柱状图轴范围，并且为其添加数据数据
    keyAxis->setTickLabelRotation(60);     // 轴刻度文字旋转60度
    keyAxis->setSubTicks(false);           // 不显示子刻度
    keyAxis->setTickLength(0, 4);          // 轴内外刻度的长度分别是0,4,也就是轴内的刻度线不显示
    keyAxis->setRange(0, m_num+1);         // 设置范围
    keyAxis->setUpperEnding(QCPLineEnding::esSpikeArrow);

    //左边
    valueAxis->setRange(0, rand);//范围
    valueAxis->setPadding(5);             // 轴的内边距，可以到QCustomPlot之开始（一）看图解
    valueAxis->setLabel("万为单位");
    valueAxis->setUpperEnding(QCPLineEnding::esSpikeArrow);

    fossil->setData(ticks, m_vec);

    ui->customPlot->replot();
}

void AnalysisWidget::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    QImage t_image;
//    t_image.load(":/image/bg.png");
//    t_image = t_image.scaled(this->width(),this->height());
//    painter.drawPixmap(0,0,this->width(),this->height(),QPixmap::fromImage(t_image));

}

void AnalysisWidget::showEvent(QShowEvent *event)
{
    for(int i = 0;i < 31;i++){
        int apstr = 50;
        m_vec.append(apstr);
    }
    updataBar();
}

void AnalysisWidget::updataBar()
{
    //创建一个柱状图，并且设置它的风格

    fossil->setAntialiased(false); // 为了更好的边框效果，关闭抗齿锯
    //fossil->setName("状图的名字"); // 设置柱状图的名字，可在图例中显示
    fossil->setPen(QPen(QColor(0, 168, 140).lighter(130))); // 设置柱状图的边框颜色
    fossil->setBrush(QColor(0, 168, 140));  // 设置柱状图的画刷颜色
    //我们为柱状图的key轴设置一个文字类型的轴
    // 为柱状图设置一个文字类型的key轴，ticks决定了轴的范围，而labels决定了轴的刻度文字的显示
    QVector<double> ticks;
    QVector<QString> labels;

    for(int i = 0;i < m_num+1;i++){
        ticks.append(i+1);
        labels.append(QString::number(i+1));
    }

    QSharedPointer<QCPAxisTickerText> textTicker(new QCPAxisTickerText);
    textTicker->addTicks(ticks, labels);

    keyAxis->setTicker(textTicker);        // 设置为文字轴
    //设置柱状图轴范围，并且为其添加数据数据
    keyAxis->setTickLabelRotation(60);     // 轴刻度文字旋转60度
    keyAxis->setSubTicks(false);           // 不显示子刻度
    keyAxis->setTickLength(0, 4);          // 轴内外刻度的长度分别是0,4,也就是轴内的刻度线不显示
    keyAxis->setRange(0, m_num+1);         // 设置范围
    keyAxis->setUpperEnding(QCPLineEnding::esSpikeArrow);

    //左边
    valueAxis->setRange(0, rand);//范围100万
    valueAxis->setPadding(5);             // 轴的内边距，可以到QCustomPlot之开始（一）看图解
    valueAxis->setLabel("relult");
    valueAxis->setUpperEnding(QCPLineEnding::esSpikeArrow);
    fossil->setData(ticks, m_vec);
    ui->customPlot->replot();
}

void AnalysisWidget::on_pushButton_2_clicked()
{
    emit sendDisWidget("m_SelectWidget");
}


void AnalysisWidget::on_pushButton_1_clicked()
{
    QVector<QVector<QString>> t_vecall = DataBasePri::queryAll("delivery");

    // 初始化每天销售额为 0，共 31 天
    QVector<double> t_day_vec(31, 0);

    for (const auto &record : t_vecall) {
        QString timeStr = record.at(1);  // 正确索引：time 在第1列
        QStringList datePart = timeStr.split(" ")[0].split("-");  // 获取 YYYY-MM-DD

        if (datePart.size() == 3) {
            int year = datePart[0].toInt();
            int month = datePart[1].toInt();
            int day = datePart[2].toInt();

            // 匹配当前选中的年月
            if (month == ui->comboBox_m->currentText().toInt() &&
                year == ui->comboBox_y->currentText().toInt()) {

                double num = record.at(3).toDouble();   // num 在第3列
                double price = record.at(6).toDouble(); // price 在第6列

                if (day >= 1 && day <= 31) {
                    t_day_vec[day - 1] += num * price;  // 累加销售额
                }
            }
        }
    }

    m_vec.clear();
    for (int i = 0; i < 31; ++i) {
        m_vec.append(t_day_vec[i] / 10000.0);  // 转换为万元
    }

    updataBar();  // 刷新柱状图
}
